// Turn the document contents into a single savable lump of data
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError {
#pragma unused(typeName)

        // Produce the data lump:
        NSData * retval = [NSKeyedArchiver archivedDataWithRootObject:model];

        // If the lump is nil something went wrong
        // fill out the error object to explain what wrent wrong
        if ( outError != NULL ) {
                // The sender wanted an error reported. If there
                // was a problem, fill in an NSError object
                if (retval == nil) {
                        // The error object should include an (unhelpful)
                        // explanation of what happened
                        NSDictionary * userInfoDict = [NSDictionary dictionaryWithObjectsAndKeys:
                                                       @"Internal error formatting data", NSLocalizedDescriptionKey,
                                                       @"Archiving of data failed. Probably a bug.", NSLocalizedFailureReasonErrorKey,
                                                       @"There's nothing you can do.", NSLocalizedRecoverySuggestionErrorKey, nil];

                        *outError = [NSError errorWithDomain:LinearInternalErrorDomain
                                     code:linErrCantFormatDocumentData
                                     userInfo:userInfoDict];
                } else {
                        // No problem. Don't supply an error object.
                        *outError = nil;
                }
        }
        return retval;
}
